﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Xml.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using Insifo.WE;

public partial class genAplicaciones : ObjectPage
{

    #region CONSTANTES

    private const string RUTA_XML_SUIT = @"~\App_Data\xml\menuSuits.xml";
    private const string RUTA_XSD_SUIT = @"~\App_Data\xml\menuSuits.xsd";

    #endregion

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            CargarSuit();
            CargarAplicaciones();
           
        }
    }

    protected void CargarAplicaciones()
    {
        string strIdSuit = Request.QueryString["s"];

        DataTable dt = new DataTable();

        if (string.IsNullOrEmpty(strIdSuit) || strIdSuit.Equals("0"))
        {
            strIdSuit = "0";
            dt = ListarPorUsuario(int.Parse(strIdSuit), UsuarioSistema.CodigoUsuario, Constantes.ESTADO_ACTIVO);
            WCSuit.BESuit be = ObtenerSuitXML(strIdSuit);
            lblTitulo.Text = be.CodigoSuit;
            lblBanner.Text = "<img src='../img/aplicacion/" + be.Banner + "'>";
        }
        else
        {
            dt = ListarPorUsuario(int.Parse(strIdSuit), UsuarioSistema.CodigoUsuario, Constantes.ESTADO_ACTIVO);
            
            //Obtener datos de Suit
            WCSuit.BESuit be = ObtenerSuit(int.Parse(strIdSuit));
            lblTitulo.Text = be.Nombre;
            lblBanner.Text = "<img src='../img/aplicacion/" + be.Banner + "'>";
        }

        lvAplicacion.DataSource = dt;
        lvAplicacion.DataBind();

    }

    protected void CargarSuit()
    {
        string strMapServer = Server.MapPath(RUTA_XML_SUIT);

        DataSet ds = new DataSet();
        ds.ReadXmlSchema( Server.MapPath(RUTA_XSD_SUIT));
        ds.ReadXml(strMapServer, XmlReadMode.ReadSchema);

        DataSet dsSuit = new DataSet();

        dsSuit = ListarSuit();

        ds.Tables[0].Merge(dsSuit.Tables[0]);

        repSuits.DataSource = ds;
        repSuits.DataBind();

    }


    protected WCSuit.BESuit  ObtenerSuitXML(string pstrId)
    {
        WCSuit.BESuit beSuit = new WCSuit.BESuit();
        string strMapServer = Server.MapPath(RUTA_XML_SUIT);
        XDocument xdSuit = XDocument.Load(strMapServer);

        var xElemento = from c in xdSuit.Descendants("suit")
                        where c.Element("IdSuit").Value == pstrId
                        select new WCSuit.BESuit
                        {
                            IdSuit  = int.Parse(c.Element("IdSuit").Value),
                            Nombre = c.Element("Nombre").Value,
                            Descripcion = c.Element("Descripcion").Value,
                            Banner = c.Element("Banner").Value
                        };
        foreach (WCSuit.BESuit be in xElemento)
        {
            beSuit.IdSuit = be.IdSuit;
            beSuit.Nombre = be.Nombre;
            beSuit.Descripcion = be.Descripcion;
            beSuit.Banner = be.Banner;
        }

        return beSuit;
    }


    protected string EvaluarImagen(string pstrIcono, string pstrEstado)
    {
        string strCadena = string.Empty;
        StringBuilder strb = new StringBuilder();

        if (pstrEstado.Equals("A"))
        {            
           strb.AppendFormat("~/img/aplicacion/{0}", pstrIcono, pstrEstado);
        }
        else
        {
            strb.AppendFormat("~/img/{0}", pstrIcono);
        }
        return strb.ToString();
    }


  
    protected void ibAplicacion_OnClick(object sender, EventArgs e)
    {
        DireccionarAplicacion(((ImageButton)sender).CommandArgument, ((ImageButton)sender).CommandName);
    }


    protected void DireccionarAplicacion(string pstrArgumento, string pstrComando)
    {
        string strCadena = string.Empty;
        string strIdAplicacion = string.Empty;
        StringBuilder strb = new StringBuilder();

        Encripta encry = new Encripta();
        BEUsuarioSistema beUsr = UsuarioSistema;

        //Obtener el Dominio de la Aplicacion
        if (!string.IsNullOrEmpty(beUsr.DominioAplicacion))
        {
            strIdAplicacion = pstrComando.Split('|')[0];
            DataTable dtDominioRedir = ListarAplicacionDominioPorAplicacion(int.Parse(strIdAplicacion));
            DataRow[] drs = dtDominioRedir.Select(" Dominio='" + beUsr.DominioAplicacion + "'");
            if (drs.Length > 0)
            {
                pstrArgumento = drs[0]["DominioURL"].ToString();
            }
        }
        //Fin Defien URL

        string strMensaje = encry.EncriptarCadena(string.Format("{0}|{1}|{2}|{3}|{4}|{5}", UsuarioSistema.Llave, beUsr.IdCompania.ToString(), beUsr.CodigoCompania, pstrComando, beUsr.CodigoUsuario, beUsr.DominioAplicacion));
        strMensaje = HttpUtility.UrlEncode(strMensaje);
        
        /*el la variable strMensaje se almacena al codigo encriptado del ususario logueado por aplicacion*/
        string strURLAplicativo = pstrArgumento;
        if (string.IsNullOrEmpty(strURLAplicativo))
        {
            Util.mensajeAJAX(this, Resources.resMensaje.msgAlertaNoExisteAplicativo);
            return;
        }
        Response.Redirect(pstrArgumento + @"/seg/segInterchange.aspx?u=" + strMensaje + "&i=" + UsuarioSistema.CodigoIdioma, false);
    }

    
   

    #region WEBSERVICES

    /// <summary>
    /// Método recupera las Suits 
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    public DataSet ListarSuit()
    {
        DataSet ds = new DataSet();
        WCSuit.BESuit beSuit = new WCSuit.BESuit();
        beSuit.Descripcion = string.Empty;
        beSuit.Estado = "A";
        beSuit.Pagina = 0;
        using (var client = new ServiceClient<WCSuit.IWCSuit>("BasicHttpBinding_IWCSuit"))
        {
            var response = client.ServiceOperation<DataSet>(c => c.Listar(beSuit));
            ds = response;
        }
        return ds;
    }

    /// <summary>
    /// Método recupera una Suit
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    public WCSuit.BESuit ObtenerSuit(int pintIdSuit)
    {
        WCSuit.BESuit be = new WCSuit.BESuit();
        be.IdSuit = pintIdSuit;
        using (var client = new ServiceClient<WCSuit.IWCSuit>("BasicHttpBinding_IWCSuit"))
        {
            var response = client.ServiceOperation<WCSuit.BESuit>(c => c.Obtener(be));
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método recupera un usuario
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    public WCUsuario.BEEntidadParam ValidarUsuarioExiste(string pstrCadena)
    {
        WCUsuario.BEEntidadParam be = new WCUsuario.BEEntidadParam();
        using (var client = new ServiceClient<WCUsuario.IWCUsuario>("BasicHttpBinding_IWCUsuario"))
        {
            var response = client.ServiceOperation<WCUsuario.BEEntidadParam>(
               c => c.ValidarUsuarioExiste(pstrCadena)
               );
            ;
            be = response;
        }
        return be;
    }


    /// <summary>
    /// Método recupera los Opciones de Menu
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected DataSet CargaMenuPorUsuario(int pstrIdAplicacion, string pstrUsuario)
    {
        DataSet ds = new DataSet();
        using (var client = new ServiceClient<WCMenu.IWCMenu>("BasicHttpBinding_IWCMenu"))
        {
            var response = client.ServiceOperation<DataSet>(c => c.ListarPorUsuario(pstrIdAplicacion, pstrUsuario));
            ds = response;
        }
        return ds;
    }


    protected DataTable ListarAplicaciones()
    {
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCAplicacion.IWCAplicacion>("BasicHttpBinding_IWCAplicacion"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar().Tables[0]);
            dt = response;
        }
        return dt;
    }

    protected DataTable ListarPorUsuario(int pintIdSuit, string pstrCodigoUsuario, string pstrEstado)
    {
        WCAplicacion.BEAplicacion be = new WCAplicacion.BEAplicacion();
        be.IdSuit = pintIdSuit;
        be.CodigoUsuario = pstrCodigoUsuario;
        be.Estado = pstrEstado;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCAplicacion.IWCAplicacion>("BasicHttpBinding_IWCAplicacion"))
        {
            var response = client.ServiceOperation<DataTable>(
               c => c.ListarPorUsuario(be).Tables[0]
               );
            ;
            dt = response;
        }
        return dt;
    }

    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método recupera las Suits 
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    public DataTable ListarAplicacionDominioPorAplicacion(int pinIdAplicacion)
    {
        DataTable dt = new DataTable();
        WCAplicacionDominio.BEAplicacionDominio beAplicacionDominio = new WCAplicacionDominio.BEAplicacionDominio();
        beAplicacionDominio.IdAplicacion = pinIdAplicacion;
        using (var client = new ServiceClient<WCAplicacionDominio.IWCAplicacionDominio>("BasicHttpBinding_IWCAplicacionDominio"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.ListarPorAplicacion(beAplicacionDominio).Tables[0]);
            dt = response;
        }
        return dt;
    }

    #endregion
}